{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d1229ceb",
   "metadata": {},
   "source": [
    "# 线性回归实验（MNIST & CIFAR-10）\n",
    "\n",
    "本实验将使用线性回归模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ]
  },
  {
   "cell_type": "code",
   "id": "2fe86273",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:20.246848Z",
     "start_time": "2025-05-22T14:43:15.490307Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "id": "364e08ef",
   "metadata": {},
   "source": [
    "## 加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "id": "3fa0c45c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:21.593084Z",
     "start_time": "2025-05-22T14:43:20.251853Z"
    }
   },
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "id": "b3d704b6",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "id": "54e57f8b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:34.993399Z",
     "start_time": "2025-05-22T14:43:21.725256Z"
    }
   },
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 5000\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:1000], y_test_m[:1000]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:1000], y_test_c[:1000]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "outputs": [],
   "execution_count": 3
  },
  {
   "cell_type": "markdown",
   "id": "32e34bcd",
   "metadata": {},
   "source": [
    "## 线性回归模型训练与评估"
   ]
  },
  {
   "cell_type": "code",
   "id": "eb1266b3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:37.912912Z",
     "start_time": "2025-05-22T14:43:35.032351Z"
    }
   },
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    # 线性回归输出为连续值，需转为整数类别\n",
    "    y_pred_cls = np.round(y_pred).astype(int)\n",
    "    y_pred_cls = np.clip(y_pred_cls, 0, 9)  # MNIST和CIFAR-10都是0-9\n",
    "    acc = accuracy_score(y_test, y_pred_cls)\n",
    "    cm = confusion_matrix(y_test, y_pred_cls)\n",
    "    return acc, cm, y_pred_cls\n",
    "\n",
    "# MNIST\n",
    "lr_mnist = LinearRegression()\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(lr_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST 线性回归准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "lr_cifar = LinearRegression()\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(lr_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 线性回归准确率: {acc_c:.3f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST 线性回归准确率: 0.219\n",
      "CIFAR-10 线性回归准确率: 0.132\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "id": "34e92ca7",
   "metadata": {},
   "source": [
    "## 可视化分析"
   ]
  },
  {
   "cell_type": "code",
   "id": "c467115a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:43:38.195495Z",
     "start_time": "2025-05-22T14:43:37.922891Z"
    }
   },
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('线性回归在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24615 (\\N{CJK UNIFIED IDEOGRAPH-6027}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22238 (\\N{CJK UNIFIED IDEOGRAPH-56DE}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 24402 (\\N{CJK UNIFIED IDEOGRAPH-5F52}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_11824\\985834842.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_11824\\985834842.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_11824\\985834842.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_11824\\985834842.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAHqCAYAAABbfXZsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMAhJREFUeJzt3QucXeO9P/5vrpN7RCKSNCGhiIj7rTjH5aCq6lKtVkubUk4RBKWkXooGoadardb1oI6KWx2levs76lrUJTi0BKWEuB5yJ5LM/F/POmfml5FEZp5JstbOvN+v15Lsvdfe+5tlZtZ3Pvt5ntWhoaGhIQAAAABaqWNrnwAAAACQCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFaIFf/OIX0aFDh2K7//77F3u8oaEhhg0bVjz+uc99rtljjc87//zzl/q6jz76aNN9Z5xxRnHfO++802zf3/zmN7HTTjvFwIEDo0ePHrHOOuvEl770pfjDH/5QPL7zzjs3vdfHben1AQA+zt///vf41re+VfQb3bp1iz59+sQOO+wQP/nJT+L9999v2m/48OFL7X0+ug0aNKjZftOnTy9eOz32zDPPLLGOb3zjG81eo66uLtZff/343ve+Fx988EGL/i0PP/xwHHXUUbHllltGly5ditf5OFdccUVsuOGGRW3rrbdeXHjhhS16H2ivOpddANSSdHKZNGlS/NM//VOz+++555549dVXixPd0vzbv/1bHHnkkUUg0Fo//OEP46STTipChfHjxxev8cILL8R//dd/xfXXXx+f+cxn4tRTT43DDjus6TmPPPJI/PSnP43vfve7xYmx0SabbLLE97jooovihBNOiM6dl/xjYcCAAfGPf/yjtP0AgJXjt7/9bRxwwAFFX/P1r389Ro8eHR9++GHxwUrqR/7617/GZZdd9rGvsfvuuxfPXVT37t2b3b7pppuawoZrr702zjrrrCW+Vqrj3//934u/z5gxI2699daYMGFCEXyk5y3L7373u+L5qQdKIclzzz231H0vvfTSOOKII+ILX/hC0Z/cd999ceyxx8bcuXPj5JNPXurz0jHZfPPNo2vXrkt8PB2/FJykIKSM/dZdd92l1g5t1gAs01VXXdWQvl3233//hgEDBjTMnz+/2eOHH354w5Zbbtmw9tprN+y1117NHkvP22yzzYo/zz///CW+7iOPPNJ03+mnn17c9/bbbxe303v16dOnYffdd19ibW+++eYS77/pppuK17nrrrta9G+88MILG0499dQlPvb+++83fOITnyh1PwBgxXvxxRcbevXq1TBy5MiGadOmLfb4888/33DBBRc03V5a7zN27NhlvteOO+5Y9FbHH398w4gRI5a4z5gxYxp69uzZ7L76+vqGT33qUw0dOnRoeOONN5b5PmmfuXPnFn9PdS3tV6C0T//+/Rf79xx00EFFDe++++5S3+Opp55q2GGHHZb6+Lbbblscu7L2gxXJ9Adoha985SvxP//zP3HHHXc0S4B/9atfxVe/+tWlPi8NF/yXf/mX+MEPftBsyGBLpGkQM2fOLF5jSdJ0CACA5SH1KrNnzy6mAAwePHixxz/5yU/GuHHj2vw+r7zySjEK4MADDyy2l156KR544IEWPTeNbkijRlN+8eKLLy5z/zXXXHOxURJLctdddxV9XpoqsaixY8fGnDlzihEcwOKECtAKad7gdtttF9ddd13Tfb///e+LoXjphPhx0loGb775Zlx88cWtes8UGqQTYVpT4d13382uHQBgWVK/kaYIbL/99m16nTQsP30wsug2b968psdTL9WzZ89iPYZtttmmGJ7fkqkMjRqnRvbr1y+Wl8cff7z4c6uttmp2f1qLoWPHjk2PA80JFaCV0oiEX//6100jDtIJMK11MGTIkI993j//8z/HLrvsUqyt0JrRCukkluYvPvbYY7HWWmvFZz/72TjnnHNi8uTJbf63AAA0SiMjX3vttdh4443b/FpppMMaa6zRbFv0Q5nUP+27775NIwi+/OUvx4033hgLFixY4us1BhNpHYW0+PXNN99crPWwwQYbxPLy+uuvR6dOnRYbBZrWK+jfv39MmzZtub0XrEqECtBK6YoLKRS4/fbbY9asWcWfHzf14aOjFd5444245JJLWvWeZ555ZrFAZFqI549//GOxKGNKzbfYYoulrpYMANDaUCHp3bt3m18rBQZpuuii2x577FE89t///d/x1FNPFdNKG6W/p9Ag9TkflaYeNAYTafrFiSeeWEwLTQs2LutKDq2R+rulLXiYFutu7RRWaC9c/QFaKZ3Qdtttt+KX/LQS8MKFC+OLX/xii5674447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i408CxY2RJV17tih7BJqXtca+P646O5/RJX9/IBNo+oW1Ff7e3lA765RZXUN1a4PWqNrl45R16WaP/tnzJ0fVbfN8NWjyi6a9HJU3fSXXooqu/Kad6Pqdjl9r6iy7dcfEFU3e/6CqLJhq/WIKpvdqWXHr5pnGwAAAKDyhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAUHuhwsKFC+O0006LESNGRPfu3WPdddeNCRMmRENDQ5llAQCUQm8EQK3pXOabn3feeXHxxRfH1VdfHRtttFE8+uijccghh0Tfvn3j2GOPLbM0AICVTm8EQK0pNVR44IEHYt9994299tqruD18+PC47rrr4uGHHy6zLACAUuiNAKg1pU5/2H777ePOO++M5557rrj95JNPxv333x977rnnEvefN29ezJw5s9kGALCq0BsBUGtKHalwyimnFCe/kSNHRqdOnYp5hGeffXYcdNBBS9x/4sSJceaZZ670OgEAVga9EQC1ptSRCjfeeGNce+21MWnSpJg8eXIxf/CHP/xh8eeSjB8/PmbMmNG0TZ06daXXDACwouiNAKg1pY5UOOmkk4pE/sADDyxub7zxxvHyyy8XqfuYMWMW27+urq7YAABWRXojAGpNqSMV5s6dGx07Ni8hDfWrr68vrSYAgLLojQCoNaWOVNh7772LeYJrrbVWcdmkxx9/PH70ox/FoYceWmZZAACl0BsBUGtKDRUuvPDCOO200+Koo46Kt956K4YMGRLf+ta34nvf+16ZZQEAlEJvBECtKTVU6N27d1xwwQXFBgDQ3umNAKg1pa6pAAAAANQuoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAEAWoQIAAACQRagAAAAAZBEqAAAAAFmECgAAAECWznlPY1XSrWunqLIFC+uj6jZbu29U2YB3u0bVHbXz8Kiyix9+pewSat6OI6r9fTJ39qyyS4Dl5slp06NHr4VRRRsNrPbPguT16R9ElR281ZCouj7dd48qu+lXD0fV3fbXt6PK1urfParuk2v0iio74da/RpXNf392i/YzUgEAAADIIlQAAAAA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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
